package br.padroes.jdbc.singlenton;

/*
 *A utilização da única instância da classe é demonstrada na classe
 *TituloDAO do pacote br.padroes.jdbc.dao*/

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/*Demonstra a importância da utilização do padrão de projetos singleton em um sistema
* que realiza conexão a um banco de dados utilizando apenas um objeto que gerencia
* as conexões ao banco de dados, isso assegura que outros objetos não inicializem conexões
* desnecessárias que tornariam o sistema lento.*/ 

public final class ConnectionFactory {
	
	//Cria referência ao objeto da classe ConnectionFactory
	private static final Connection connection = new ConnectionFactory().getConnection();
	
	//Construtor vazio definido como private para ser acessado apenas pela própria classe
	private ConnectionFactory(){
		
	}
	
	//Método que retorna a conexao ao banco de dados
	private Connection getConnection(){
		try {
			return DriverManager.getConnection("jdbc:mysql://localhost/livros", "root", "root");
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	
	
	/*Método estático que retorna a referência ao objeto de ConnectionFactory. É o único método da classe ConnectionFactory
	* que pode ser acessado. Sempre retornará o mesmo objeto da classe ConnectionFactory para garantir a implementação
	* do padrão de projeto de software singleton que garante a existência de apenas uma instância de uma classe, mantendo um
	* ponto global de acesso ao seu objeto.*/
	public static Connection getInstance(){
		return connection;
	}
}